开发者说丨Git删除本地任意提交记录的方法
Git是一款免费、开源的分布式版本控制系统,可以敏捷高效地处理任何或小或大的项目。
在项目实际开发过程中,可能由于疏忽,上传了一些敏感信息,例如测试的账户名与密码,但是后续的工作需要将项目公开,为了避免信息泄露,那么必须清除Git的提交历史记录。
本文由社区荣誉布道师——贺志国撰写,对Git删除本地任意提交记录的方法进行了详细讲解,希望这篇文章能给感兴趣的开发者带来更多帮助。
以下,ENJOY
使用git管理代码版本时,有时需要删除一些本地错误提交的记录,如果待删除记录是最后一条或N条记录,操作很简单,使用如下命令即可:
1# 删除本地最后一条记录,如果需要删除最后提交的N条记录,将“1”替换为一个具体的数字“N”即可。
2git reset --hard HEAD~1
<左右滑动以查看完整代码>
但生活往往不会太过于简单,有时我们会需要删除提交记录中的某几条,例如,使用git log命令(小提示:可以使用git log --oneline查看精简的提交记录)查看得到的提交记录如下:
1# 显示每次修改的文件列表及修改状态
2git log --name-status
3# 显示每次修改的文件列表
4git log --name-only
5# 显示每次修改的文件列表及文件修改的统计
6git log --stat
7# 显示每次修改的文件列表
8git whatchanged
9# 显示每次修改的文件列表及统计信息
10git whatchanged --stat
11# 显示最后一次的文件改变的具体内容
12git show
<左右滑动以查看完整代码>
需要删除图中用蓝色框标注的两条记录,这时该怎么办呢?
首先找到最后一条待删除记录的前一条记录ID,a8547a8beb2a11efc80a0594ebb2da21ced10439(实际处理时没必要写这么长,只写前面几位a8547即可,具体需要的长度无法指定,确定原则就是确保记录ID能唯一标识),接下来执行如下命令:
1git rebase -i a8547
<左右滑动以查看完整代码>
会进入如下界面:
注意:1. 界面中的提交记录是以堆栈显示的,本地最后一条提交记录显示在最下方,最后一条待删除记录显示在最上方;2. 界面是以vi打开的,编辑方法与vi命令相同。
根据前图中的蓝框标记,待删除记录的ID分别为3dd131a、ec4a612。使用j、k上下移动到pick 3dd131a与pick ec4a612,再使用cw命令将行首的pick替换为drop注意每完成一个替换操作,需要按下Esc键退出vi的编辑模式)。检查确认后,按wq保存并退出,接下来就等待git为我们删除上述两条选中的提交记录,顺利完成后的提示如下所示:
可以使用git log命令检查确认上述两条记录已被删除:
当然,也有可能会出现无法删除某条记录的情况,例如,删除记录2f18f01就会出现如下错误:
解决方法当然就是按照提示,要么人工解决冲突后,使用git rebase --continue继续变基,要么就是使用git rebase --skip忽略问题(强烈不建议,因为极有可能无法变基成功,即使成功也会出现很大的隐患),要么使用git rebase --abort终止变基。
git rebase -i命令还可以用来调整本地提交记录的顺序,方法很简单,在如下界面中使用vi的操作命令修改提交记录的顺序,按wq保存退出即可:
以上是本次开发者投稿的全部内容,更多话题讨论、技术交流可以扫描下方二维码添加『Apollo小哥哥』为好友,进开发者交流群。
* 以上内容为开发者原创,不代表百度官方言论。
内容来自CSDN:
https://blog.csdn.net/davidhopper/article/details/95597551,欢迎大家收藏点赞。已获开发者授权,原文地址请戳阅读原文。